home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / gepackte_disketten / 1994 / 08_94_5.dms / 08_94_5.adf / term-4.0-Source.lha / HotkeyPanel.c < prev    next >
C/C++ Source or Header  |  1994-06-26  |  8KB  |  341 lines

  1. /*
  2. **    HotkeyPanel.c
  3. **
  4. **    Editing panel for hotkey configuration
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_TERMTOFRONT=1,GAD_BUFFERTOFRONT,GAD_SKIPDIAL,GAD_ABORTAREXX,
  13.         GAD_PRIORITY,GAD_HOTKEYS,GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL
  14.     };
  15.  
  16. STATIC BOOLEAN __regargs
  17. GoodCode(STRPTR Code)
  18. {
  19.     IX Expression;
  20.  
  21.     return((BOOLEAN)(ParseIX(Code,&Expression) == 0));
  22. }
  23.  
  24. BYTE __regargs
  25. HotkeyPanel(struct Hotkeys *Hotkeys)
  26. {
  27.     struct LayoutHandle    *Handle;
  28.     struct Hotkeys         PrivateHotkeys;
  29.     ULONG             OldCRC;
  30.  
  31.     OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  32.  
  33.     CopyMem(Hotkeys,&PrivateHotkeys,sizeof(struct Hotkeys));
  34.  
  35.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  36.         LH_LocaleHook,    &LocaleHook,
  37.     TAG_DONE))
  38.     {
  39.         struct Window *Window;
  40.  
  41.         LT_New(Handle,
  42.             LA_Type,    VERTICAL_KIND,
  43.         TAG_DONE);
  44.         {
  45.             LT_New(Handle,
  46.                 LA_Type,    VERTICAL_KIND,
  47.                 LA_LabelID,    MSG_V36_0083,
  48.             TAG_DONE);
  49.             {
  50.                 LT_New(Handle,
  51.                     LA_Type,    STRING_KIND,
  52.                     LA_LabelID,    MSG_HOTKEYPANEL_TERM_SCREEN_TO_FRONT_GAD,
  53.                     LA_STRPTR,    Hotkeys -> termScreenToFront,
  54.                     LA_Chars,    30,
  55.                     GTST_MaxChars,    255,
  56.                     LA_ID,        GAD_TERMTOFRONT,
  57.                 TAG_DONE);
  58.  
  59.                 LT_New(Handle,
  60.                     LA_Type,    STRING_KIND,
  61.                     LA_LabelID,    MSG_HOTKEYPANEL_BUFFER_SCREEN_TO_FRONT_GAD,
  62.                     LA_STRPTR,    Hotkeys -> BufferScreenToFront,
  63.                     GTST_MaxChars,    255,
  64.                     LA_ID,        GAD_BUFFERTOFRONT,
  65.                 TAG_DONE);
  66.  
  67.                 LT_New(Handle,
  68.                     LA_Type,    STRING_KIND,
  69.                     LA_LabelID,    MSG_HOTKEYPANEL_SKIP_DIAL_ENTRY_GAD,
  70.                     LA_STRPTR,    Hotkeys -> SkipDialEntry,
  71.                     GTST_MaxChars,    255,
  72.                     LA_ID,        GAD_SKIPDIAL,
  73.                 TAG_DONE);
  74.  
  75.                 LT_New(Handle,
  76.                     LA_Type,    STRING_KIND,
  77.                     LA_LabelID,    MSG_HOTKEYPANEL_ABORT_AREXX_GAD,
  78.                     LA_STRPTR,    Hotkeys -> AbortARexx,
  79.                     GTST_MaxChars,    255,
  80.                     LA_ID,        GAD_ABORTAREXX,
  81.                 TAG_DONE);
  82.  
  83.                 LT_EndGroup(Handle);
  84.             }
  85.  
  86.             LT_New(Handle,
  87.                 LA_Type,        VERTICAL_KIND,
  88.                 LA_LabelID,        MSG_V36_0084,
  89.             TAG_DONE);
  90.             {
  91.                 LT_New(Handle,
  92.                     LA_Type,        SLIDER_KIND,
  93.                     LA_LabelID,        MSG_HOTKEYPANEL_COMMODITY_PRIORITY_GAD,
  94.                     LA_BYTE,        &Hotkeys -> CommodityPriority,
  95.                     GTSL_Min,        -128,
  96.                     GTSL_Max,        127,
  97.                     GTSL_LevelFormat,    "%4ld",
  98.                     LA_Chars,        16,
  99.                     LA_ID,            GAD_PRIORITY,
  100.                 TAG_DONE);
  101.  
  102.                 LT_New(Handle,
  103.                     LA_Type,    CHECKBOX_KIND,
  104.                     LA_LabelID,    MSG_HOTKEYPANEL_HOTKEYS_ENABLED_GAD,
  105.                     LA_BYTE,    &Hotkeys -> HotkeysEnabled,
  106.                     LA_ID,        GAD_HOTKEYS,
  107.                 TAG_DONE);
  108.  
  109.                 LT_EndGroup(Handle);
  110.             }
  111.  
  112.             LT_New(Handle,
  113.                 LA_Type,VERTICAL_KIND,
  114.             TAG_DONE);
  115.             {
  116.                 LT_New(Handle,
  117.                     LA_Type,    XBAR_KIND,
  118.                     LAXB_FullSize,    TRUE,
  119.                 TAG_DONE);
  120.  
  121.                 LT_EndGroup(Handle);
  122.             }
  123.  
  124.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  125.                 LAGR_SameSize,    TRUE,
  126.                 LAGR_Spread,    TRUE,
  127.             TAG_DONE);
  128.             {
  129.                 LT_New(Handle,
  130.                     LA_Type,    BUTTON_KIND,
  131.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  132.                     LA_ID,        GAD_USE,
  133.                     LABT_ReturnKey,    TRUE,
  134.                     LABT_ExtraFat,    TRUE,
  135.                 TAG_DONE);
  136.  
  137.                 LT_New(Handle,
  138.                     LA_Type,    BUTTON_KIND,
  139.                     LA_LabelID,    MSG_GLOBAL_LOAD_GAD,
  140.                     LA_ID,        GAD_LOAD,
  141.                     LABT_ExtraFat,    TRUE,
  142.                 TAG_DONE);
  143.  
  144.                 LT_New(Handle,
  145.                     LA_Type,    BUTTON_KIND,
  146.                     LA_LabelID,    MSG_GLOBAL_SAVE_GAD,
  147.                     LA_ID,        GAD_SAVE,
  148.                     LABT_ExtraFat,    TRUE,
  149.                 TAG_DONE);
  150.  
  151.                 LT_New(Handle,
  152.                     LA_Type,    BUTTON_KIND,
  153.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  154.                     LA_ID,        GAD_CANCEL,
  155.                     LABT_EscKey,    TRUE,
  156.                     LABT_ExtraFat,    TRUE,
  157.                 TAG_DONE);
  158.  
  159.                 LT_EndGroup(Handle);
  160.             }
  161.  
  162.             LT_EndGroup(Handle);
  163.         }
  164.  
  165.         if(Window = LT_Layout(Handle,LocaleString(MSG_HOTKEYPANEL_HOTKEY_PREFERENCES_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  166.             LAWN_HelpHook,        &GuideHook,
  167.             WA_DepthGadget,        TRUE,
  168.             WA_CloseGadget,        TRUE,
  169.             WA_DragBar,        TRUE,
  170.             WA_RMBTrap,        TRUE,
  171.             WA_Activate,        TRUE,
  172.         TAG_DONE))
  173.         {
  174.             struct IntuiMessage    *Message;
  175.             BOOLEAN             Done = FALSE;
  176.             ULONG             MsgClass,
  177.                          MsgQualifier;
  178.             UWORD             MsgCode;
  179.             struct Gadget        *MsgGadget;
  180.  
  181.             struct FileRequester    *FileRequest;
  182.             UBYTE             DummyBuffer[MAX_FILENAME_LENGTH],
  183.                         *DummyChar;
  184.  
  185.             STRPTR             String;
  186.  
  187.             GuideContext(CONTEXT_HOTKEYS);
  188.  
  189.             PushWindow(Window);
  190.  
  191.             do
  192.             {
  193.                 if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  194.                 {
  195.                     CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  196.  
  197.                     break;
  198.                 }
  199.  
  200.                 while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  201.                 {
  202.                     MsgClass    = Message -> Class;
  203.                     MsgQualifier    = Message -> Qualifier;
  204.                     MsgCode        = Message -> Code;
  205.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  206.  
  207.                     GT_ReplyIMsg(Message);
  208.  
  209.                     LT_HandleInput(Handle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  210.  
  211.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  212.                     {
  213.                         CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  214.  
  215.                         Done = TRUE;
  216.                     }
  217.  
  218.                     if(MsgClass == IDCMP_GADGETUP)
  219.                     {
  220.                         switch(MsgGadget -> GadgetID)
  221.                         {
  222.                             case GAD_TERMTOFRONT:
  223.                             case GAD_BUFFERTOFRONT:
  224.                             case GAD_SKIPDIAL:
  225.                             case GAD_ABORTAREXX:
  226.  
  227.                                 String = LT_GetString(Handle,MsgGadget -> GadgetID);
  228.  
  229.                                 if(!GoodCode(String))
  230.                                 {
  231.                                     DisplayBeep(Window -> WScreen);
  232.  
  233.                                     LT_Activate(Handle,MsgGadget -> GadgetID);
  234.                                 }
  235.  
  236.                                 break;
  237.  
  238.                             case GAD_USE:
  239.  
  240.                                 Done = TRUE;
  241.                                 break;
  242.  
  243.                             case GAD_CANCEL:
  244.  
  245.                                 CopyMem(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys));
  246.  
  247.                                 Done = TRUE;
  248.                                 break;
  249.  
  250.                             case GAD_LOAD:
  251.  
  252.                                 SplitFileName(LastKeys,&DummyChar,DummyBuffer);
  253.  
  254.                                 LT_LockWindow(Window);
  255.  
  256.                                 if(FileRequest = GetFile(Window,LocaleString(MSG_HOTKEYPANEL_LOAD_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  257.                                 {
  258.                                     if(!LoadHotkeys(DummyBuffer,Hotkeys))
  259.                                         ShowError(Window,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  260.                                     else
  261.                                     {
  262.                                         strcpy(LastKeys,DummyBuffer);
  263.  
  264.                                         LT_SetAttributes(Handle,GAD_TERMTOFRONT,
  265.                                             GTST_String,Hotkeys -> termScreenToFront,
  266.                                         TAG_DONE);
  267.  
  268.                                         LT_SetAttributes(Handle,GAD_BUFFERTOFRONT,
  269.                                             GTST_String,Hotkeys -> BufferScreenToFront,
  270.                                         TAG_DONE);
  271.  
  272.                                         LT_SetAttributes(Handle,GAD_SKIPDIAL,
  273.                                             GTST_String,Hotkeys -> SkipDialEntry,
  274.                                         TAG_DONE);
  275.  
  276.                                         LT_SetAttributes(Handle,GAD_ABORTAREXX,
  277.                                             GTST_String,Hotkeys -> AbortARexx,
  278.                                         TAG_DONE);
  279.  
  280.                                         LT_SetAttributes(Handle,GAD_PRIORITY,
  281.                                             GTSL_Level,Hotkeys -> CommodityPriority,
  282.                                         TAG_DONE);
  283.  
  284.                                         LT_SetAttributes(Handle,GAD_HOTKEYS,
  285.                                             GTCB_Checked,Hotkeys -> HotkeysEnabled,
  286.                                         TAG_DONE);
  287.  
  288.                                         OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  289.  
  290.                                         HotkeysChanged = FALSE;
  291.                                     }
  292.  
  293.                                     FreeAslRequest(FileRequest);
  294.                                 }
  295.  
  296.                                 LT_UnlockWindow(Window);
  297.  
  298.                                 break;
  299.  
  300.                             case GAD_SAVE:
  301.  
  302.                                 SplitFileName(LastKeys,&DummyChar,DummyBuffer);
  303.  
  304.                                 LT_LockWindow(Window);
  305.  
  306.                                 if(FileRequest = GetFile(Window,LocaleString(MSG_HOTKEYPANEL_SAVE_HOTKEYS_TXT),DummyBuffer,FilePart(LastKeys),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  307.                                 {
  308.                                     if(!WriteIFFData(DummyBuffer,Hotkeys,sizeof(struct Hotkeys),ID_HOTK))
  309.                                         ShowError(Window,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  310.                                     else
  311.                                     {
  312.                                         strcpy(LastKeys,DummyBuffer);
  313.  
  314.                                         OldCRC = DoCRC(Hotkeys,sizeof(struct Hotkeys));
  315.  
  316.                                         HotkeysChanged = FALSE;
  317.                                     }
  318.  
  319.                                     FreeAslRequest(FileRequest);
  320.                                 }
  321.  
  322.                                 LT_UnlockWindow(Window);
  323.  
  324.                                 break;
  325.                         }
  326.                     }
  327.                 }
  328.             }
  329.             while(!Done);
  330.  
  331.             PopWindow();
  332.         }
  333.  
  334.         LT_DeleteHandle(Handle);
  335.     }
  336.  
  337.     HotkeysChanged |= (OldCRC != DoCRC(Hotkeys,sizeof(struct Hotkeys)));
  338.  
  339.     return((BYTE)memcmp(&PrivateHotkeys,Hotkeys,sizeof(struct Hotkeys)));
  340. }
  341.